package org.jinyan.db.utils;

import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class BeanMapConverUtil {

	/**
	 * bean转json
	 * 
	 * @param o
	 * @return
	 */
	public static String toString(Object o) {
		String json = new Gson().toJson(o);
		return json;

	}

	/**
	 * json转换为指定格式
	 * 
	 * @param json
	 * @return
	 */
	public static <T> T StringToClass(String json, Type type) {
		T t = new Gson().fromJson(json, type);
		return t;
	}

	/**
	 * json转换为指定格式
	 * 
	 * @param json
	 * @return
	 */
	public static <T> T StringToClass(String json, Class<T> c) {
		T t = new Gson().fromJson(json, c);
		return t;
	}

	/**
	 * list转换为指定形式的list集合
	 * 
	 * @param list
	 * @param type
	 * @return
	 */
	public static <T> List<T> fromList(List<?> list, Type type) {
		String s = toString(list);
		List<T> ts = StringToClass(s, type);
		return ts;
	}

	/**
	 * 将List集合转换为List<Map<String,Object>>,并通过别名映射类格式化为指定别名
	 * 
	 * @param list
	 * @param formatClass
	 *            转换别名的映射类
	 * @return
	 */
	/*
	 * public static <T> List<T> fromList(List<?> list, Type formatType, Type
	 * retureType){ List<T> format = fromList(list, formatType); JSONArray
	 * jsonArray = JSONArray.fromObject(format); List<T> res = toList(jsonArray,
	 * retureType); return res; }
	 */
	/**
	 * bean转map
	 * 
	 * @param o
	 * @return
	 */
	public static Map<String, String> fromBean(Object o) {
		String s = toString(o);
		Type type = new TypeToken<Map<String, String>>() {
		}.getType();
		Map<String, String> map = StringToClass(s, type);
		return map;
	}

	/**
	 * 转换为指定格式
	 * 
	 * @param json
	 * @return
	 */
	public static <T> T toBean(Object object, Type type) {
		String s = toString(object);
		T t = new Gson().fromJson(s, type);
		return t;
	}

	/**
	 * 转换为指定格式
	 * 
	 * @param json
	 * @return
	 */
	public static <T> T toBean(Object object, Class<T> c) {
		String s = toString(object);
		T t = new Gson().fromJson(s, c);
		return t;
	}

	/**
	 * 转换为指定格式的List集合
	 * 
	 * @param json
	 * @return
	 */
	public static <T> List<T> toList(Object object, Type type) {
		String s = toString(object);
		List<T> t = new Gson().fromJson(s, type);
		return t;
	}

}
